package org.fall.view.service;

import org.fall.view.model.ResultEntity;
import org.fall.view.model.dto.MailBoxDTO;
import org.fall.view.model.dto.MemberUserDTO;
import org.fall.view.model.dto.NewspaperSubmitDTO;
import org.fall.view.model.po.LeaderInfoPO;
import org.fall.view.model.vo.DailyNewspaperVO;
import org.fall.view.model.vo.MailBoxVO;
import org.fall.view.model.vo.MemberUserVO;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 会员用户service接口
 * @author sprogFall
 * @since 2021/4/12 15:20
 */
public interface MemberUserService {
    /**
     * 进行登录操作
     * @param dto 登录所用数据
     * @param session session
     * @return 登录结果
     */
    ResultEntity login(MemberUserDTO dto, HttpSession session);

    /**
     * 得到leader的list
     * @param except leader list中排除的id
     * @return 查询结果
     */
    List<LeaderInfoPO> getLeaderList(Integer except);

    /**
     * 提交日报
     * @param dto dto
     * @param writerId 作者id
     * @return 提交结果
     */
    ResultEntity submitPaper(NewspaperSubmitDTO dto, Integer writerId);

    /**
     * 获取作者是登录用户的日报
     * @param loginId 登录用户的id
     * @return 查询结果
     */
    List<DailyNewspaperVO> getMyNewspaper(Integer loginId);

    /**
     * 获取抄送人是登录用户的日报
     * @param leaderId 登录用户的id
     * @return 查询结果
     */
    List<DailyNewspaperVO> getLeaderNewspaper(Integer leaderId);

    /**
     * 查询全部的未被删除的会员用户
     * @return 查询结果
     */
    List<MemberUserVO> getMemberUserVOList();

    /**
     * 发送邮件
     * @param dto dto
     * @param sendUserId 发件人id
     * @return 发送结果
     */
    ResultEntity sendMail(MailBoxDTO dto, Integer sendUserId);

    /**
     * 保存邮件草稿
     * @param dto dto
     * @param sendUserId 发件人id
     * @return 保存结果
     */
    ResultEntity saveMail(MailBoxDTO dto, Integer sendUserId);

    /**
     * 得到当前用户保存的邮件草稿
     * @param loginId 登录用户id
     * @return 查找结果
     */
    MailBoxVO getSavedMail(Integer loginId);

    /**
     * 查询当前登录用户的收件信息
     * @param loginId 登录用户的id
     * @param anonymous 是否匿名
     * @param type 邮件类型
     * @return 查询的结果
     */
    List<MailBoxVO> getAcceptMail(Integer loginId, String type, String anonymous);

    /**
     * 查询当前登录用户的发件信息
     * @param loginId 登录用户的id
     * @param type 邮件类型
     * @return 查询的结果
     */
    List<MailBoxVO> getSendMail(Integer loginId, String type);
}
